#include<bits/stdc++.h>
using namespace std;
typedef struct Node{
	int data;
	struct Node *next;
}NODE,*LinkList;
LinkList create(LinkList L){
	int n;
	LinkList p,q;
	L=(LinkList)malloc(sizeof(NODE));
	int x;
	p=L;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&x);
		q=(LinkList)malloc(sizeof(NODE));
		q->data=x;
		p->next=q;
		q->next=NULL;
		p=q;
	}
	return L;
}
LinkList print(LinkList L){
	LinkList p;
	p=L->next;
	while(p){
		printf("%d ",p->data);
		p=p->next;
	}
	return L;
}
LinkList reverse(LinkList L){
	LinkList p,q;
	p=L->next;
	L->next=NULL;
	while(p){
		q=p;
		p=p->next;
		q->next=L->next;
		L->next=q;
	}
	return L;
}
LinkList insert(LinkList L,int pos,int val){
	LinkList p,q;
	p=L;
	int i=0;
	while(p&&i<pos-1){
		p=p->next;
		i++;
	}
	q=(LinkList)malloc(sizeof(NODE));
	q->data=val;
	q->next=p->next;
	p->next=q;
	return L;
}
LinkList delet(LinkList L,int pos,int *val){
	LinkList p,q;
	p=L;
	int i=0;
	while(p&&i<pos-1){
		p=p->next;
		i++;
	}
	q=p->next;
	*val=q->data;
	p->next=q->next;
	free(q);
	q=NULL;
	return L;
}
LinkList sort(LinkList L1,LinkList L2){
	LinkList p,q,r;
	LinkList L=(LinkList)malloc(sizeof(NODE));
	p=L1->next;
	q=L2->next;
	r=L;
	while(p&&q){
		if(p->data<q->data){
			r->next=p;
			r=p;
			p=p->next;
		}
		else{
			r->next=q;
			r=q;
			q=q->next;
		}
	}
		if(p)
			r->next=p;
		else if(q)
			r->next=q;
		else
			r->next=NULL;
		return L;
}
int main(){
	LinkList L1,L2,L;
	int val;
	L1=create(L1);
	L2=create(L2);
	L=sort(L1,L2);
	//reverse(L);
	//insert(L,2,99);
	//delet(L,2,&val);
	print(L);
	return 0;
}
